package com.yc;

import dev.langchain4j.data.message.AiMessage;
import dev.langchain4j.data.message.ChatMessage;
import dev.langchain4j.data.message.UserMessage;
import dev.langchain4j.model.chat.response.ChatResponse;
import dev.langchain4j.model.chat.response.StreamingChatResponseHandler;
import dev.langchain4j.model.openai.OpenAiStreamingChatModel;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CompletableFuture;

public class _09_FewShot {
    public static void main(String[] args) {
        String apiKey=System.getenv("DEEPSEEK_API_KEY");
        OpenAiStreamingChatModel model = OpenAiStreamingChatModel.builder()
                .apiKey(apiKey)
                .modelName("deepseek-chat")
                .baseUrl("https://api.deepseek.com")
                .logRequests(true)
                .logResponses(true)
                .build();

        //场景假设:你是一个App软件客户服务代表,你需要帮助处理用户的反馈
        //这里主要针对的是此App升级更新后的反馈

        //初始化Few-Shot实例历史 用于给大模型提供上下文知道
        List<ChatMessage> fewShotHistory = new ArrayList<>();
        //添加正面反馈实例
        fewShotHistory.add(UserMessage.from(
                "我喜欢这个App,非常好用,功能非常强大,推荐给大家"
        ));
        fewShotHistory.add(AiMessage.from(
            "动作:提供一个正向反馈并存储.\n回复:好的,谢谢你的反馈,我们会继续努力提供更好的服务"
        ));
        //添加负面反馈实例
        fewShotHistory.add(UserMessage.from(
                "在我的机器上面经常死机"
        ));
        fewShotHistory.add(AiMessage.from(
                "动作: 新开工单-更新机器后崩溃.\n回复:好的,我们会继续努力改进用户体验"
        ));

        //另一个正面反馈
        fewShotHistory.add(UserMessage.from(
                "你的app使我的日常更加便捷,非常感谢"
        ));
        fewShotHistory.add(AiMessage.from(
                "动作:提供一个正向反馈并存储.\n回复:好的,谢谢你的反馈,我们会继续努力提供更好的服务"
        ));
        //另一个负面反馈
        fewShotHistory.add(UserMessage.from(
                "引起我的数据丢失"
        ));
        fewShotHistory.add(AiMessage.from(
                "动作:新开工单-更新后数据丢失.\n回复:好的,我们会继续努力改进用户体验"
        ));
        UserMessage customerComplaint = UserMessage.from(
                "我的app运行如此慢,请告知如何处理");
        fewShotHistory.add(customerComplaint);

        System.out.println("[用户信息]: "+customerComplaint.singleText());
        System.out.println("[大模型相应]:");

        CompletableFuture<ChatResponse> future=new CompletableFuture<>();
//        String prompt="请告诉我什么是RAG";
        model.chat(fewShotHistory,new StreamingChatResponseHandler() {
            StringBuilder fullResponse = new StringBuilder();
            @Override
            public void onPartialResponse(String s) {
                fullResponse.append(s); // 先拼接完整内容
                System.out.print(s); // 实时输出增量内容（不换行）
                System.out.flush(); // 刷新输出缓冲区
            }

            @Override
            public void onCompleteResponse(ChatResponse chatResponse) {
                System.out.println("\n[完整响应]: " + chatResponse);
                future.complete(chatResponse);
            }

            @Override
            public void onError(Throwable throwable) {
                System.err.println("流式响应错误: " + throwable.getMessage());
                future.completeExceptionally(throwable);
            }
        });
         future.join();
    }
}
